//
//  DLMBlueTooth.swift
//  NetWork
//
//  Created by Delin Meng 孟德林 on 2018/10/26.
//  Copyright © 2018 Delin Meng 孟德林. All rights reserved.
//

import UIKit
import CoreBluetooth

class DLMBlueTooth: NSObject {


    public func writeValue(serviceUUID:Int,
                           characteristicUUID:Int,
                           peripheral:CBPeripheral,
                           data:Data) {

        guard let s = UnsafeRawPointer.init(bitPattern: serviceUUID), let c = UnsafeRawPointer.init(bitPattern: characteristicUUID) else {
            fatalError("serviceUUID  or characteristicUUID is nil")
        }
        let sd = Data.init(bytes: s, count: 2)
        let sc = Data.init(bytes: c, count: 2)

        let su = CBUUID.init(data: sd)
        let cu = CBUUID.init(data: sc)

//        let service =

         



    }

    private func discoverService(uuid:CBUUID,peripheral:CBPeripheral) {
        guard let services = peripheral.services else {
            fatalError("service is not exist")
        }
        for item in services {



        }


    }







}

extension DLMBlueTooth:CBCentralManagerDelegate {

    /// 中心设备管理状态的回调
    func centralManagerDidUpdateState(_ central: CBCentralManager) {



    }

    /*
     1、中心设备发现外围设备的回调，包含广播数据包，如果发现已经在列表中的设备，则覆盖保存一次
     2、每找到一个 peripheral 都会调用 centralManager:didDiscoverPeripheral:advertisementData:RSSI: 方法。另外，当已发现的 peripheral
     3、发送的数据包有变化时，这个代理方法同样会调用。
     */
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {


    }

    /// 中心设备成功连接BLE外围设备
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {




    }


    /// 设备连接失败
    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {




    }

    /// 设备连接已经断开
    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {



    }



}


/// 外围设备代理协议方法
extension DLMBlueTooth:CBPeripheralDelegate {

    /// RSSI 更新
    func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {




    }

    /// 服务发现完成之后的回调方法
    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {



    }

    /// 发现服务的特征值，打印所有服务的特征值。
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {




    }


    /*
     特征值更新后的回调函数，或者收到通知和提示消息后的回调
     这里会根据特征值的UUID来进行区分是哪一个特征值的更新或者改变通知
     如果这些特征值的UUID的值，事先不确定，必须靠连接后的读取来获得，必须在获取之后保存在某一个可变阵列缓冲中
     事后，根据收到的消息中的UUID和缓冲中的特征值UUID逐个比较，最终改变相应特征值的值
     */
    // 特征值读取，或者得到更改通知后的回调
    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {




    }

    // 已经写入
    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {


    }

    // 已经写入的描述
    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor descriptor: CBDescriptor, error: Error?) {



    }

    // 更新通知状态
    func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) {



    }

    // 每个特征值获取之后的回调,等获取完此服务的所有特征值之后，发出通知分组显示特征值列表
    func peripheral(_ peripheral: CBPeripheral, didDiscoverDescriptorsFor characteristic: CBCharacteristic, error: Error?) {



    }


    // 每个描述之后的回调
    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor descriptor: CBDescriptor, error: Error?) {




    }

}
